﻿#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建一个老师对象
    this->tc = new teacher(this);
    //创建一个学生对象
    this->st = new student(this);
//    //老师饿了，学生请客的连接
//    connect(tc,&teacher::hungry,st,&student::treat);

//    //调用下课信号
//    ClassIsOver();

    //连接带参数的信号和槽
    //指针->地址
    //函数指针->函数地址
    void(teacher:: *teacherSignal)(QString) = &teacher::hungry;
    void(student:: *studentSignal)(QString) = &student::treat;
    connect(tc,teacherSignal,st,studentSignal);
//    ClassIsOver();

    //点击一个下课的按钮触发下课
    QPushButton *btn = new QPushButton("下课",this);
    //重置窗口大小
    this->resize(600,400);
    //点击按钮，触发下课
    //connect(btn,&QPushButton::clicked,this,&Widget::ClassIsOver);
    //无参信号和槽连接

    void(teacher:: *teacherSignal2)() = &teacher::hungry;
    void(student:: *studentSignal2)() = &student::treat;
    connect(tc,teacherSignal2,st,studentSignal2);
    //信号连接信号
    connect(btn,&QPushButton::clicked,tc,teacherSignal2);
    //断开信号
    //disconnect(tc,teacherSignal2,st,studentSignal2);

    //扩展
    //1、信号是可以连接信号
    //2、一个信号可以连接多个槽函数
    //3、多个信号 可以连接 同一个槽函数
    //4、信号和槽函数的类型必须一一对应

    //Qt4版本以前的信号和槽连接方式
    //connect(tc,SIGNAL(hungry()),st,SLOT(treat()));
    //Qt4版本  优点：参数直观   缺点：类型不做检测
    //Qt5以上  支持Qt4的版本写法，反之不支持

//    QPushButton * btn2 = new QPushButton;
//    btn2->setParent(this);
//    btn2->setText("bbbbb");
//     btn2->move(100,50);

//    [=](){
//        btn->setText("aaaa");
//        btn2->setText("wwww`");
//    }();

    QPushButton *mybtn  = new QPushButton (this);
    QPushButton *mybtn2 = new QPushButton (this);
    mybtn->move(25,100);
    mybtn2->move(100,100);
    int m=10;
    connect(mybtn,&QPushButton::clicked,this,[m]()mutable{m=100+10;qDebug()<<m;});
    connect(mybtn2,&QPushButton::clicked,this,[=](){qDebug()<<m;});
    qDebug()<<m;


    int ret = []()->int{return 1000;}();
    qDebug()<<"ret = "<<ret;



}

void Widget::ClassIsOver()
{
    //下课后触发老师饿了信号
    //emit tc->hungry();
    emit tc->hungry("宫保鸡丁");
}
Widget::~Widget()
{
    delete ui;
}

